concrete5 CMSのファイルアップロード先をAmazon S3に指定する
この記事は、concrete5 Japan Advent Calendar 2015に参加しています。
コンクリートファイブジャパン株式会社のいわもんです。 ロップイヤー(うさぎ)のわさびちゃん(♀)は、今日も元気いっぱいです。 本業のわさびちゃんのお世話のかたわら、副業でインフラエンジニアをやっています。
Storage for Amazon S3 アドオン
concrete5には、ファイルマネージャーと呼ばれるファイル管理機能があり、アップロードされたファイルはWEBサーバー内のディスクに保存されます。
しかし、可愛すぎるわさびちゃんの写真や動画をばっしばっしアップロードすると、あっという間にサーバーのディスクがパンパンになります。
わさびちゃんの写真や動画を消さず保存し続けるには、サーバーのディスクを増やしていくしかなくなります。でも、サーバーは止められない。そんな大量のバックアップどうすれば?ストレージの耐障害性は?そして、いつかは限界が・・・
でも、Amazon S3なら、容量無制限でファイルの保存が!イレブンナインの耐障害性!ファイルの世代管理もできる! これなら、わさびちゃんの写真や動画も、安心安全に無制限に保管できる!!!
そしてなんと、concrete5にはファイルマネージャーからのアップロード先をAmazon S3 へと指定できる「Storage for Amazon S3」というアドオンがあります!!!
と、無理くりペットのうさぎと、Amazon S3をこじつけてみました。
S3自体のより詳しい説明は、こちら「AWS再入門 Amazon S3編」をご覧いただくとして、 S3が持つ機能以外でも、concrete5で「Storage for Amazon S3」アドオン」を利用するメリットがあります。
「Amazon S3」 + 「Storage for Amazon S3」アドオン を利用するメリット
- 共有ストレージ:
冗長化や負荷分散の目的で複数台のWEBサーバーを構成した際に、別途共有ストレージを用意・運用することは、コスト・運用負荷の増加につながります。「Amazon S3」 + 「Storage for Amazon S3」アドオンの構成であれば、容易に共有ストレージの構築・運用が可能です。
- 静的コンテンツと動的コンテンツの分離:
WEBサイトを高速化させる際、静的コンテンツ(画像やCSS、JSなど)と、動的なコンテンツ(PHPプログラムなど)の分離(それぞれ別のサーバーで配信する)という手法があります。S3には静的WEBコンテンツの配信機能もあり、アップロードされた静的コンテンツはS3から、PHPはWEBサーバーからと、コンテンツの配信を分散させることでコンテンツの表示の高速化が図れます。
では、実際にconcrete5で、Storage for Amazon S3 アドオン を利用してみましょう。
Amazon S3 の設定
AWS ManagementConsole より 「S3」を選択します。
バケットの作成を選択し、バケット名を入力します。
S3のバケットが出来ました。
次に、S3の静的WEBホスティングの設定を行います。 「Storage for Amazon S3」アドオンでは、S3の静的WEBホスティングの機能を利用してを配信します。
対象のバケットを選択し、「静的ウェブホスティング」の項目から「ウェブサイトのホスティングを有効にする」を選択します。
次にアクセス許可の設定を行います。 インターネット上から、該当のS3バケット上のコンテンツが閲覧可能とするための、ポリシーを記載します。「アクセス許可」の項目から「バケットポリシーの編集」を選択します。
ポリシーは下記の内容を参考にください。簡単には、今回作成した「BACKETNAME」にファイルの取得のみを許可する設定を記載しています。
{ "Version": "2012-10-17", "Id": "Policy1450081565940", "Statement": [ { "Sid": "Stmt1450081562973", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BACKETNAME/*" } ] }
続いて、今回作成したS3バケットへ「Storage for Amazon S3」アドオンからアップロードする際に利用するAWSでのユーザーとポリシーを作成します。 以下では、該当のS3バケットのみへの接続が可能なユーザーを作成しています。 マネジメントコンソールより、Identity and Access Management (以下IAM)を選択します。
IAMの画面より、「ポリシー」を選択し、「ポリシーの作成」を選択します。
先ほど作成したユーザーへ、該当のバケットのみへの全権操作の権限を与える設定となります。 ポリシーの記載は下記を参考にください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::BACKETNAME/*" } ] }
次に「ユーザー」を選択し、「新規ユーザーの作成」を選択します。
任意のユーザー名の入力後、アクセスキーとシークレットキーが表示されます。 「Storage for Amazon S3」アドオンからS3バケットへのサクセス時に、この接続情報を利用します。 また、シークレットキーはこの画面以降に再表示はできないので、認証情報をダウンロードの上、きちんと保管しておきましょう。
作成したユーザーへポリシーを割り当てます。 先ほど作成したユーザーを一覧から選択し、「アクセス許可」より「ポリシーのアタッチ」を選択するとポリシーの一覧が表示されます。 その中から、先ほど作成したポリシーを選択し割り当てます。
これで、S3の設定は完了です。
「Storage for Amazon S3」アドオンの設定
concrete5へのアドオンのインストールについては、詳しくはこちらをご覧ください。
続いて、保存先となるS3バケットを設定します。 管理画面へより「システムと設定」「ファイル」「ファイル保存場所」と順に選択をし、「タイプを選択」します。
正常にアドオンがインストールされていれば、メニューにAmazonS3が表示されているので、「Amazon S3」を選択し「実行」を選択します。
先ほど作成したS3バケットの登録をします。 順に先ほど作成したS3バケット名、アクセスキー、シークレットキーを入力します。 また、ディフォルトを「はい」とすることで、以後ファイルマネージャーより アップされるディフォルトの保存先がS3となります。
では、実際にファイルマネージャーよりファイルのアップロードを行い、アップロードされたファイルを確認すると、ファイルのURLがS3となっていることが確認できます。
これで容量を気にすることなく、わさびちゃんの画像をconcrete5にアップロードすることができます!
あ、わさびちゃんが呼んでる、餌の時間だ、これで。